package ynwx.libaray.utils;

import android.content.Context;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import okhttp3.Call;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

/** 网络请求基类
 * Created by xiaoxiao on 2017/11/21.
 */

public class HttpUtils {
    private static HttpUtils httpUtils;

    private OkHttpClient okHttpClient;

    public static String URL = "http://service.promsys.jny.com/";

    public static String SUCCESS = "200";

    public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

    private HttpUtils(){
        okHttpClient = new OkHttpClient();
    }

    public static HttpUtils getInstance(){
        if (httpUtils==null){
            httpUtils = new HttpUtils();
        }
        return httpUtils;
    }

    /**
     *  网络请求基本模式（map请求）
     * @param map 请求数据
     * @return Call
     */
    public Call mapCall(Map<String,String> map, String url){
        FormBody.Builder builder = new FormBody.Builder();
        for (String key: map.keySet()) {
            builder.add(key,map.get(key));
        }
        RequestBody requestBody = builder.build();
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        return okHttpClient.newCall(request);
    }

    /**
     * 网络请求基本模式（json请求）
     * @param json json数据
     * @param url url地址
     * @return
     */
    public Call jsonCall(String json, String url){
        RequestBody requestBody = RequestBody.create(JSON, json);
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        return okHttpClient.newCall(request);
    }


//    public Call maptwoCall(Map<String,Object> map,String url){
//        FormBody.Builder builder = new FormBody.Builder();
//        for (String key: map.keySet()) {
//            builder.add(key,map.get(key));
//        }
//        RequestBody requestBody = builder.build();
//        Request request = new Request.Builder()
//                .url(url)
//                .post(requestBody)
//                .build();
//        return okHttpClient.newCall(request);
//    }

    /**
     * 错误码反馈信息
     * @param context
     * @param code
     */
    public void Errorcode(Context context, String code){
//        if (code.equals("201")){
//            ynwx.jny.base.BaseActivity.showToast(context,"缺少参数，请稍后再试");
//        }else if (code.equals("202")){
//            ynwx.jny.base.BaseActivity.showToast(context,"用户不存在");
//        }else if (code.equals("203")){
//            ynwx.jny.base.BaseActivity.showToast(context,"存入失败");
//        }else if (code.equals("204")){
//            ynwx.jny.base.BaseActivity.showToast(context,"图片不存在");
//        }else if (code.equals("205")){
//            ynwx.jny.base.BaseActivity.showToast(context,"连接失败，请稍后重试");
//        }else if (code.equals("206")){
//            ynwx.jny.base.BaseActivity.showToast(context,"你们还不是好友");
//        }else if (code.equals("207")){
//            ynwx.jny.base.BaseActivity.showToast(context,"用户名或密码错误");
//        }else if (code.equals("208")){
//            ynwx.jny.base.BaseActivity.showToast(context,"连接失败，请稍后重试");
//        }else if (code.equals("209")){
//            ynwx.jny.base.BaseActivity.showToast(context,"连接失败，请稍后重试");
//        }else if (code.equals("210")){
//            ynwx.jny.base.BaseActivity.showToast(context,"用户已存在");
//        }else if (code.equals("211")){
//            ynwx.jny.base.BaseActivity.showToast(context,"赞不足");
//        }else if (code.equals("212")){
//            ynwx.jny.base.BaseActivity.showToast(context,"已拉黑");
//        }else if (code.equals("213")){
//            ynwx.jny.base.BaseActivity.showToast(context,"已关注");
//        }else if (code.equals("214")){
//            ynwx.jny.base.BaseActivity.showToast(context,"已加为好友");
//        }else if (code.equals("215")){
//            ynwx.jny.base.BaseActivity.showToast(context,"已举报");
//        }else if (code.equals("216")){
//            ynwx.jny.base.BaseActivity.showToast(context,"验证码错误");
//        }else if (code.equals("217")){
//            ynwx.jny.base.BaseActivity.showToast(context,"赞数不能为0");
//        }else if (code.equals("218")){
//            ynwx.jny.base.BaseActivity.showToast(context,"删除失败，请稍后再试");
//        }else if (code.equals("219")){
//            ynwx.jny.base.BaseActivity.showToast(context,"不是黑名单");
//        }else if (code.equals("224")){
//            ynwx.jny.base.BaseActivity.showToast(context,"该手机号已注册");
//        }
//
//        else if (code.equals("228")){
//            ynwx.jny.base.BaseActivity.showToast(context,"请勿重复点赞");
//        }
//        else {
//            ynwx.jny.base.BaseActivity.showToast(context,"请稍后再试");
//        }
    }

    /**
     *  将json数据转换为map集合
     * @param gsonStr
     * @return
     */
    public static Map<String, Object> gsonToMap(String gsonStr)
    {
        Gson gson = new Gson();
        Type type = new TypeToken<Map<String, Object>>()
        {
        }.getType();
        Map<String, Object> map = gson.fromJson(gsonStr, type);
        return map;
    }

    /**
     * 将map集合转为json
     * @param map
     * @return
     */
    public static String mapToJson(Map<String, Object> map)
    {
        String tab_str = "";
        String json = tab_str + "{";
        int i = 0;
        for (String key : map.keySet())
        {
            if (i >= map.size())
                break;
            String content = "";
            try
            {
                List<Map<String, Object>> list = (List<Map<String, Object>>) map.get(key);
                content += "[";
                int j = 0;
                for (Map<String, Object> map2 : list) {
                    if (j == list.size())
                        break;
                    content += mapToJson(map2) + (j++ == list.size() - 1 ? "" : ",");
                }
                content += tab_str + "]"/* + (i == (map.size() - 1) ? "" : ",")*/;
            }
            catch (Exception e)
            {
                content = "\"" + map.get(key).toString() + "\"";
            }
            json += tab_str + "\"" + key + "\":" + content + (i++ == map.size() - 1 ? "" : ",");
        }
        json += tab_str + "}";
        return json;
    }

}